package com.smedi.ismedi.progress.api.feign;

import com.smedi.ismedi.progress.api.dto.response.*;
import com.smedi.ismedi.progress.api.dto.request.*;
import com.smedi.ismedi.web.starter.common.PaginationData;
import com.smedi.ismedi.web.starter.common.ResponseData;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 特种设备
 *
 * @author xienannan
 * @date 2021/08/28
 */
@FeignClient(name = "ismedi-progress")
@Api(tags = {"进度模块"})
@RequestMapping(value = "/api/v1/progress")
@RestController
public interface RemoteProgressFeignApi {

    /**
     * 获取进度看板分页信息
     *
     * @return ResponseData<PaginationData>
     */
    @ApiOperation(httpMethod = "POST", value = "进度计划看板分页信息", response = ProgressKanBanListResponse.class)
    @PostMapping(value = "/progressKanBan/page")
    ResponseData<PaginationData<ProgressKanBanListResponse>> getProgressKanBanPage(@Validated @RequestBody ProgressKanBanRequest progressKanBanRequest);


    /**
     * 获取进度计划项目分页信息
     *
     * @param offset
     * @param pageSize
     * @param hrOrganizationId
     * @param projectId
     * @param mainCourtyardId
     * @param projectManager
     * @param progressStatus
     * @param projectCategory
     * @return ResponseData<PaginationData>
     */
    @ApiOperation(httpMethod = "GET", value = "进度计划项目分页信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "offset", value = "页码", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "pageSize", value = "每页行数", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "组织机构id", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "projectId", value = "项目id", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectManager", value = "项目经理", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "mainCourtyardId", value = "主体院id", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectCategory", value = "工程类别", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "progressStatus", value = "进度状态", dataType = "Integer", dataTypeClass = Integer.class)
    })
    @GetMapping(value = "/progress/page")
    ResponseData<PaginationData<ProgressResponse>> getProgressPage(@RequestParam("offset") Long offset,
                                                                   @RequestParam("pageSize") Long pageSize,
                                                                   @RequestParam(value = "hrOrganizationId", required = false) Long hrOrganizationId,
                                                                   @RequestParam(value = "projectId", required = false) Integer projectId,
                                                                   @RequestParam(value = "projectManager", required = false) String projectManager,
                                                                   @RequestParam(value = "mainCourtyardId", required = false) Integer mainCourtyardId,
                                                                   @RequestParam(value = "progressStatus", required = false) Integer progressStatus,
                                                                   @RequestParam(value = "projectCategory", required = false) String projectCategory);

    /**
     * 获取进度计划项目分页信息
     *
     * @param offset
     * @param pageSize
     * @param projectId
     * @param hrOrganizationId
     * @param progressStatus
     * @return ResponseData<PaginationData>
     */
    @ApiOperation(httpMethod = "GET", value = "APP端进度计划项目分页信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "offset", value = "页码", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "pageSize", value = "每页行数", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "projectId", value = "项目id", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "组织机构id", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "appSearch", value = "搜索条件（项目名称/项目经理名称）", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "progressStatus", value = "进度状态", dataType = "Integer", dataTypeClass = Integer.class)
    })
    @GetMapping(value = "/progress/pageByApp")
    ResponseData<PaginationData<ProgressResponse>> getProgressPageByApp(@RequestParam("offset") Long offset,
                                                                   @RequestParam("pageSize") Long pageSize,
                                                                   @RequestParam(value = "projectId", required = false) Integer projectId,
                                                                   @RequestParam(value = "hrOrganizationId", required = false) Long hrOrganizationId,
                                                                   @RequestParam(value = "appSearch", required = false) String appSearch,
                                                                   @RequestParam(value = "progressStatus", required = false) Integer progressStatus);

    /**
     * 进度计划-甘特图 详情页
     *
     * @param progressDetailRequest
     */
    @ApiOperation(httpMethod = "POST", value = "进度计划-甘特图 详情页")
    @PostMapping(value = "/progressProject/scheduleDetailsByApp")
    ResponseData<ProgressScheduleDetailsResponse> scheduleDetailsByApp(@Validated @RequestBody ProgressDetailRequest progressDetailRequest);


    /**
     * 获取里程碑列表分页信息
     *
     * @param offset
     * @param pageSize
     * @param projectId
     * @param hrOrganizationId
     * @param mainCourtyardId
     * @param projectManager
     * @param milestoneProgressStatus
     * @param projectCategory
     * @param projectName
     * @return ResponseData<PaginationData>
     */
    @ApiOperation(httpMethod = "GET", value = "里程碑列表分页信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "offset", value = "页码", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "pageSize", value = "每页行数", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "组织机构id", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "projectId", value = "项目id", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectManager", value = "项目经理", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "mainCourtyardId", value = "主体院", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectCategory", value = "工程类别", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "milestoneProgressStatus", value = "里程碑进度状态", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectName", value = "项目名称/项目经理（app）", dataType = "String", dataTypeClass = String.class)
    })
    @GetMapping(value = "/milestone/page")
    ResponseData<PaginationData<MilestoneResponse>> getMilestonePage(@RequestParam("offset") Long offset,
                                                                     @RequestParam("pageSize") Long pageSize,
                                                                     @RequestParam(value = "hrOrganizationId", required = false) Long hrOrganizationId,
                                                                     @RequestParam(value = "projectId", required = false) Integer projectId,
                                                                     @RequestParam(value = "projectManager", required = false) String projectManager,
                                                                     @RequestParam(value = "mainCourtyardId", required = false) Integer mainCourtyardId,
                                                                     @RequestParam(value = "milestoneProgressStatus", required = false) Integer milestoneProgressStatus,
                                                                     @RequestParam(value = "projectCategory", required = false) String projectCategory,
                                                                     @RequestParam(value = "projectName", required = false) String projectName);


    /**
     * 获取关键线路列表分页信息
     *
     * @param offset
     * @param pageSize
     * @param projectId
     * @param hrOrganizationId
     * @param mainCourtyardId
     * @param projectManager
     * @param taskProgressStatus
     * @param projectCategory
     * @return ResponseData<PaginationData>
     */
    @ApiOperation(httpMethod = "GET", value = "关键线路分页信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "offset", value = "页码", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "pageSize", value = "每页行数", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "组织机构id", dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(paramType = "query", name = "projectId", value = "项目id", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectManager", value = "项目经理", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "mainCourtyardId", value = "主体院", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectCategory", value = "工程类别", dataType = "String", dataTypeClass = String.class),
            @ApiImplicitParam(paramType = "query", name = "taskProgressStatus", value = "关键任务进度状态", dataType = "Integer", dataTypeClass = Integer.class),
            @ApiImplicitParam(paramType = "query", name = "projectName", value = "项目名称/项目经理 （app）", dataType = "String", dataTypeClass = String.class)
    })
    @GetMapping(value = "/keyTask/page")
    ResponseData<PaginationData<KeyTaskResponse>> getKeyTaskPage(@RequestParam("offset") Long offset,
                                                                 @RequestParam("pageSize") Long pageSize,
                                                                 @RequestParam(value = "hrOrganizationId", required = false) Long hrOrganizationId,
                                                                 @RequestParam(value = "projectId", required = false) Integer projectId,
                                                                 @RequestParam(value = "projectManager", required = false) String projectManager,
                                                                 @RequestParam(value = "mainCourtyardId", required = false) Integer mainCourtyardId,
                                                                 @RequestParam(value = "taskProgressStatus", required = false) Integer taskProgressStatus,
                                                                 @RequestParam(value = "projectCategory", required = false) String projectCategory,
                                                                 @RequestParam(value = "projectName", required = false) String projectName);

    /**
     * 获取 版本管理 列表
     *
     * @param versionManageRequest
     * @return ResponseData<List < VersionManageResponse>>
     */
    @ApiOperation(httpMethod = "POST", value = "版本管理列表信息")
    @PostMapping(value = "/version/list")
    ResponseData<PaginationData<VersionManageResponse>> getVersionList(@Validated @RequestBody VersionManageRequest versionManageRequest);

    /**
     * 导入mpp project文件，创建项目版本信息
     *
     * @param projectFile   project文件
     * @param projectId     项目id
     * @param scheduleName  名称
     * @param compileDate   编制时间
     * @param compilePerson 编制人
     * @param description   描述
     * @return 错误信息
     */
    @ApiOperation(httpMethod = "POST", value = "创建项目版本信息")
    @PostMapping(value = "/version/import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    ResponseData<String> versionImport(@RequestPart(value = "file") MultipartFile projectFile,
                                       @RequestParam(value = "projectId") Long projectId,
                                       @RequestParam(value = "scheduleName") String scheduleName,
                                       @RequestParam(value = "compileDate", required = false) String compileDate,
                                       @RequestParam(value = "compilePerson", required = false) String compilePerson,
                                       @RequestParam(value = "description", required = false) String description);

    /**
     * @return success
     */
    @ApiOperation(httpMethod = "GET", value = "下载mpp project模板文件")
    @GetMapping(value = "/version/downloadProjectTemplateFile")
    ResponseEntity<byte[]> downloadProjectTemplateFile();

    /**
     * 获取 里程杯详情 列表
     *
     * @param projectId
     * @return ResponseData<List < VersionManageResponse>>
     */
    @ApiOperation(httpMethod = "GET", value = "里程杯详情列表信息")
    @ApiImplicitParam(paramType = "query", name = "projectId", value = "项目id", dataType = "Long", dataTypeClass = Long.class)
    @GetMapping(value = "/milestoneDetail/list")
    ResponseData<List<MilestoneDetailResponse>> getMilestoneDetailList(@RequestParam("projectId") Long projectId);

    /**
     * 获取 进度看板统计
     *
     * @param hrOrganizationId
     * @return ResponseData<ProgressKanBanStatisticResponse>
     */
    @ApiOperation(httpMethod = "GET", value = "进度看板统计")
    @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "企业组织id", dataType = "Long", dataTypeClass = Long.class)
    @GetMapping(value = "/progressKanBan/statistic")
    ResponseData<ProgressKanBanStatisticResponse> getProgressKanBanStatistics(@RequestParam("hrOrganizationId") Long hrOrganizationId);

    /**
     * 获取 进度看板滞后项目
     *
     * @param hrOrganizationId
     * @return ResponseData<ProgressKanBanLagProjectResponse>
     */
    @ApiOperation(httpMethod = "GET", value = "进度看板滞后项目")
    @ApiImplicitParam(paramType = "query", name = "hrOrganizationId", value = "企业组织id", dataType = "Long", dataTypeClass = Long.class)
    @GetMapping(value = "/progressKanBan/lagProject")
    ResponseData<List<ProgressKanBanLagProjectResponse>> getProgressKanBanLagProject(@RequestParam("hrOrganizationId") Long hrOrganizationId);

    /**
     * 主体院审批 项目计划
     *
     * @param progressReviewProjectRequest 主体院审批 项目计划
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "主体院审批 项目计划", nickname = "主体院审批 项目计划")
    @PostMapping(value = "/progressProject/review-projectProgress")
    ResponseData<VersionManageResponse> reviewPojectProgress(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * 工程部审批 项目计划
     *
     * @param progressReviewProjectRequest 工程部审批 项目计划
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "工程部审批 项目计划", nickname = "工程部审批 项目计划")
    @PostMapping(value = "/progressProject/review-projectProgress-Institution")
    ResponseData<VersionManageResponse> reviewPojectProgressInstitution(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * 进度计划审批/查看 页面
     *
     * @param progressViewRequest 进度计划详情 页面
     * @return ResponseData<ProgressViewResponse>
     */
    @ApiOperation(value = "进度计划审批 查看 页面", nickname = "进度计划审批 查看 页面")
    @PostMapping(value = "/progressProject/scheduleViewAndApproval")
    ResponseData<ProgressViewResponse> scheduleViewAndApproval(@Validated @RequestBody ProgressViewRequest progressViewRequest);

    /**
     * 删除 进度版本管理
     */
    @ApiOperation(httpMethod = "POST", value = "删除 进度版本管理")
    @PostMapping(value = "/progressProject/remove")
    ResponseData<Boolean> removeProgressPojectVersion(@Validated @RequestBody ProgressViewRequest progressViewRequest);

    /**
     * 进度计划-甘特图 详情页
     *
     * @param progressDetailRequest
     */
    @ApiOperation(httpMethod = "POST", value = "进度计划-甘特图 详情页")
    @PostMapping(value = "/progressProject/scheduleDetails")
    ResponseData<ProgressScheduleDetailsResponse> scheduleDetails(@Validated @RequestBody ProgressDetailRequest progressDetailRequest);

    /**
     * 关键字线路 详情页
     */
    @ApiOperation(httpMethod = "POST", value = "关键字线路 详情页")
    @PostMapping(value = "/progressProject/keywordDetails")
    ResponseData<ProgressScheduleDetailsResponse> keywordDetails(@Validated @RequestBody ProgressDetailRequest progressDetailRequest);

    /**
     * 进度看板 详情页
     */
    @ApiOperation(httpMethod = "POST", value = "进度看板 详情页")
    @PostMapping(value = "/progressProject/progressKanbanDetails")
    ResponseData<ProgressKanbanDetailsResponse> progressKanbanDDetails(@Validated @RequestBody ProgressDetailRequest progressDetailRequest);

    /**
     * 进度周报 施工经理审批
     *
     * @param progressReviewProjectRequest 进度周报 施工经理审批
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周报 施工经理审批", nickname = "进度周报 施工经理审批")
    @PostMapping(value = "/progressProject/review-weekReport-Institution")
    ResponseData<WeekMonthReportResponse> reviewWeekReportInstitution(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * 进度周报 列表页 PC
     *
     * @param progressReportListRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.util.List < com.smedi.ismedi.progress.api.dto.response.ProgressWeekReportListResponse>
     * @date 2022/9/28 14:49
     */
    @ApiOperation(httpMethod = "POST", value = "进度周报 列表页 PC")
    @PostMapping(value = "/progressReport/week")
    ResponseData<PaginationData<ProgressReportListResponse>> progressWeekReportList(@Validated @RequestBody ProgressReportListRequest progressReportListRequest);

    /**
     * 进度周月报 列表页 APP
     *
     * @param progressReportListRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.util.List < com.smedi.ismedi.progress.api.dto.response.ProgressWeekReportListResponse>
     * @date 2022/9/28 14:49
     */
    @ApiOperation(httpMethod = "POST", value = "进度周月报 列表页 App")
    @PostMapping(value = "/progressReport/weekMonthApp")
    ResponseData<PaginationData<ProgressReportListResponse>> progressWeekMonthReportListApp(@Validated @RequestBody ProgressReportListRequest progressReportListRequest);

    /**
     * 进度月报 列表页 PC
     *
     * @param progressReportListRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.util.List < com.smedi.ismedi.progress.api.dto.response.ProgressWeekReportListResponse>
     * @date 2022/9/28 14:49
     */
    @ApiOperation(httpMethod = "POST", value = "进度月报 列表页 PC")
    @PostMapping(value = "/progressReport/month")
    ResponseData<PaginationData<ProgressReportListResponse>> progressMonthReportList(@Validated @RequestBody ProgressReportListRequest progressReportListRequest);


    /**
     * 进度月报 详情页
     *
     * @param progressReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<ProgressReportMonthDetailAllResponse>
     * @throws
     * @date 2022/9/29 13:18
     */
    @ApiOperation(httpMethod = "POST", value = "进度月报 详情页")
    @PostMapping(value = "/progressReport/monthDetail")
    ResponseData<ProgressReportMonthDetailAllResponse> progressMonthReportDetail(@Validated @RequestBody ProgressReportDetailRequest progressReportDetailRequest);

    /**
     * 进度周报 详情页
     *
     * @param progressReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<ProgressReportWeekDetailAllResponse>
     * @throws
     * @date 2022/9/29 13:18
     */
    @ApiOperation(httpMethod = "POST", value = "进度周报 详情页")
    @PostMapping(value = "/progressReport/weekDetail")
    ResponseData<ProgressReportWeekDetailAllResponse> progressWeekReportDetail(@Validated @RequestBody ProgressReportDetailRequest progressReportDetailRequest);

    /**
     * 进度月报 施工经理审批
     *
     * @param progressReviewProjectRequest 进度月报 施工经理审批
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度月报 施工经理审批", nickname = "进度月报 施工经理审批")
    @PostMapping(value = "/progressProject/review-monthReport-Institution")
    ResponseData<WeekMonthReportResponse> reviewMonthReportInstitution(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * 进度周月报 编辑页面
     *
     * @param progressWeekMonthReportRequest 进度周月报 编辑页面
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周月报 编辑页面", nickname = "进度周月报 编辑页面")
    @PostMapping(value = "/progressProject/monthReportEidtDetail")
    ResponseData<WeekMonthReportEidtResponse> monthWeekReportEidtDetail(@Validated @RequestBody ProgressWeekMonthReportRequest progressWeekMonthReportRequest);

    /**
     * 进度周月报 保存草稿/发布
     *
     * @param weekMonthReportEidtSaveRequest 进度周月报 保存草稿/发布
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周月报 保存草稿 发布", nickname = "进度周月报 保存草稿 发布")
    @PostMapping(value = "/progressProject/monthWeekReportSaveDraft")
    ResponseData<String> monthWeekReportSaveDraftAndRelease(@Validated @RequestBody WeekMonthReportEidtSaveRequest weekMonthReportEidtSaveRequest);

    /**
     * 进度周月报 生成总结
     *
     * @param weekMonthReportEidtSaveRequest 进度周月报 生成总结
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周月报 生成总结", nickname = "进度周月报 生成总结")
    @PostMapping(value = "/progressProject/monthWeekReportCreateSum")
    ResponseData<String> monthWeekReportCreateSum(@Validated @RequestBody WeekMonthReportTypeRequest weekMonthReportEidtSaveRequest);

    /**
     * 导出进度月报/周报
     *
     * @param progressReportExportRequest
     * @return String`
     * @throws IOException
     * @date 2022/10/8 13:24
     */
    @ApiOperation(httpMethod = "POST", value = "进度月报/周报批量 导出")
    @PostMapping(value = "/progressReport/batchExportMonthWeek", produces = "application/stream+json")
    ResponseEntity<byte[]> progressMonthWeekReportBatchExport(@Validated @RequestBody ProgressReportExportRequest progressReportExportRequest) throws IOException;

    /**
     * 进度月报 新增
     *
     * @param monthReportCreateRequest 进度周月报 生成总结
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度月报 新增", nickname = "进度月报 新增")
    @PostMapping(value = "/progressProject/monthReportCreate")
    ResponseData<String> monthReportCreate(@Validated @RequestBody MonthReportCreateRequest monthReportCreateRequest);

    /**
     * 进度周报 新增
     *
     * @param date
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周报 新增", nickname = "进度周报 新增")
    @PostMapping(value = "/progressProject/weekReportCreate")
    ResponseData<Boolean> weekReportCreate(@RequestParam(value = "date", required = false) String date);

    /**
     * 进度周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）", nickname = "进度周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）")
    @PostMapping(value = "/progressProject/weekReportNews")
    ResponseData<Boolean> weekReportNews();

    /**
     * 进度月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）", nickname = "进度月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）")
    @PostMapping(value = "/progressProject/monthReportNews")
    ResponseData<Boolean> monthReportNews();

    /**
     * 定时任务每月 定时新增未生成的月报
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "定时任务每月 定时新增未生成的月报", nickname = "定时任务每月 定时新增未生成的月报")
    @PostMapping(value = "/progressProject/monthReportCreateTask")
    ResponseData<Boolean> monthReportCreateTask();

    /**
     * 查询项目简报列表
     *
     * @param projectBriefListRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<projectBriefListResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询项目简报列表 ")
    @PostMapping(value = "/projectBriefReport/list")
    ResponseData<PaginationData<ProjectBriefListResponse>> projectBriefList(@Validated @RequestBody ProjectBriefListRequest projectBriefListRequest);


    /**
     * 查询项目简报详情
     *
     * @param projectBriefReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.util.List < com.smedi.ismedi.progress.api.dto.response.ProjectBriefReportDetailResponse>>
     * @date 2022/10/13 15:03
     */
    @ApiOperation(httpMethod = "POST", value = "查询项目简报详情 ")
    @PostMapping(value = "/projectBriefReport/detail")
    ResponseData<ProjectBriefReportDetailAllResponse> projectBriefReportDetail(@Validated @RequestBody ProjectBriefReportDetailRequest projectBriefReportDetailRequest);

    /**
     * 保存编辑项目简报详情
     *
     * @param projectBriefReportEditRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.lang.Boolean>
     * @date 2022/10/13 16:56
     */
    @ApiOperation(httpMethod = "POST", value = "保存编辑项目简报详情 ")
    @PostMapping(value = "/projectBriefReport/edit")
    ResponseData<Boolean> projectBriefReportEdit(@Validated @RequestBody ProjectBriefReportAllRequest projectBriefReportEditRequest);

    /**
     * 定时任务每月 定时生成项目简报
     *
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.lang.Boolean>
     */
    @ApiOperation(value = "定时任务每月 定时生成项目简报", nickname = "定时任务每月 定时生成项目简报")
    @PostMapping(value = "/projectBriefReport/BriefReportCreateTask")
    ResponseData<Boolean> projectBriefReportCreateTask();

    /**
     * 项目简报 导出
     *
     * @param projectBriefReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<java.lang.String>
     * @date 2022/10/13 20:47
     */
    @ApiOperation(httpMethod = "POST", value = "项目简报 导出")
    @PostMapping(value = "/projectBriefReport/export")
    ResponseEntity<byte[]> projectBriefReportExport(@Validated @RequestBody ProjectBriefReportExportRequest projectBriefReportDetailRequest) throws IOException;

    /**
     * 获取项目信息
     *
     * @param progressViewRequest 获取项目信息
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "获取项目信息", nickname = "获取项目信息")
    @PostMapping(value = "/progressProject/projectInformation")
    ResponseData<ProjectResponse> projectInformation(@Validated @RequestBody ProgressViewRequest progressViewRequest);

    /**
     * 查看进度计划流程
     *
     * @param id
     * @return ResponseData<ProcessTaskResponse>
     */
    @ApiOperation(value = "查看进度计划流程", nickname = "查看进度计划流程")
    @ApiImplicitParam(paramType = "query", name = "id", value = "计划表id", dataType = "Long", dataTypeClass = Long.class)
    @GetMapping(value = "/progressSchedule/process")
    ResponseData<List<ProgressProcessResponse>> progressScheduleProcess(@RequestParam("id") Long id);

    /**
     * 查询施工日志列表  pc
     *
     * @param constructionLogListRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<ConstructionLogListResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询施工日志列表 pc")
    @PostMapping(value = "/constructionLogPC/list")
    ResponseData<PaginationData<ConstructionLogListResponse>> constructionLogPCList(@Validated @RequestBody ConstructionLogListRequest constructionLogListRequest);

    /**
     * 查询施工日志列表 app
     *
     * @param constructionloglistapprequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<ConstructionLogListResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询施工日志列表 app")
    @PostMapping(value = "/constructionLogAPP/list")
    ResponseData<ConstructionLogListAppResponse> constructionLogAPPList(@Validated @RequestBody ConstructionLogListAppRequest constructionloglistapprequest);

    /**
     * 查询施工日志详情
     *
     * @param constructionlogdetailrequest
     * @return com.smedi.ismedi.web.starter.common.List<ConstructionLogListResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询施工日志详情 ")
    @PostMapping(value = "/constructionLog/detail")
    ResponseData<ConstructionLogDetailResponse> constructionLogDetail(@Validated @RequestBody ConstructionLogDetailRequest constructionlogdetailrequest);

    /**
     * 根据项目id，日志日期获取对应的施工日志信息。
     *
     * @param constructionLogRequest
     * @return ConstructionLogDetailResponse
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "根据项目id，日志日期获取对应的施工日志信息")
    @PostMapping(value = "/constructionLog/constructionContext")
    ResponseData<List<ConstructionLogResponse>> constructionContext(@Validated @RequestBody ConstructionLogRequest constructionLogRequest);

    /**
     * 保存，发布施工日志
     *
     * @param constructionlogdetailrequest
     * @return ConstructionLogDetailResponse
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "保存，发布施工日志")
    @PostMapping(value = "/constructionLog/monthWeekConstructionSaveDraftAndRelease")
    ResponseData<String> monthWeekConstructionSaveDraftAndRelease(@Validated @RequestBody ConstructionLogSaveAndDraftRequest constructionlogdetailrequest);

    /**
     * 施工日志 导出
     *
     * @param constructionlogdetailrequest
     * @return com.smedi.ismedi.web.starter.common.ResponseEntity<byte [ ]>
     * @throws IOException
     * @date 2022/10/13 20:47
     */
    @ApiOperation(httpMethod = "POST", value = "施工日志 导出")
    @PostMapping(value = "/constructionLog/export")
    ResponseEntity<byte[]> constructionLogExport(@Validated @RequestBody ConstructionLogDetailRequest constructionlogdetailrequest) throws IOException;

    /**
     * 工程报告-月报，每月18号0点生成当月的工程报告
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "工程报告-月报，每月18号0点生成当月的工程报告", nickname = "工程报告-月报，每月18号0点生成当月的工程报告")
    @PostMapping(value = "/engineeringReport/engineeringMonthReportCreateTask")
    ResponseData<Boolean> engineeringMonthReportCreateTask();

    /**
     * 查询工程周月报列表  pc
     *
     * @param engineeringReportListPcRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<EngineeringReportResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询工程周月报列表 pc")
    @PostMapping(value = "/engineeringReportPC/list")
    ResponseData<PaginationData<EngineeringReportResponse>> engineeringReportListPC(@Validated @RequestBody EngineeringReportListPcRequest engineeringReportListPcRequest);


    /**
     * 查询工程周月报列表  app
     *
     * @param engineeringReportListAppRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseData<EngineeringReportResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询工程周月报列表 app")
    @PostMapping(value = "/engineeringReportAPP/list")
    ResponseData<PaginationData<EngineeringReportResponse>> engineeringReportListAPP(@Validated @RequestBody EngineeringReportListAppRequest engineeringReportListAppRequest);

    /**
     * 施工日志 附件下载全部
     *
     * @param constructionlogdownloadRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseEntity<byte [ ]>
     * @throws IOException
     * @date 2022/10/13 20:47
     */
    @ApiOperation(httpMethod = "POST", value = "施工日志 附件下载全部")
    @PostMapping(value = "/constructionLog/downloadBySignKeys")
    ResponseEntity<byte[]> downloadBySignKeys(@Validated @RequestBody ConstructionLogDownloadRequest constructionlogdownloadRequest) throws IOException;

    /**
     * 查询工程周月报详情
     * @param engineeringReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.List<EngineeringReportDetailResponse>
     * @date 2022/10/12 15:17
     */
    @ApiOperation(httpMethod = "POST", value = "查询工程周月报详情 ")
    @PostMapping(value = "/engineeringReport/detail")
    ResponseData<EngineeringReportDetailResponse> engineeringReportDetail(@Validated @RequestBody EngineeringReportDetailRequest engineeringReportDetailRequest);

    /**
     * 工程报告-周报，每周五0点生成本周的工程报告 huchao1
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "工程报告-周报，每周五0点生成本周的工程报告", nickname = "工程报告-周报，每周五0点生成本周的工程报告")
    @PostMapping(value = "/engineeringReport/engineeringWeekReportCreateTask")
    ResponseData<Boolean> engineeringWeekReportCreateTask();

    /**
     *
     * ！！！！！！！！！！！！！！！！
     * 主体院审批 工程报告
     *
     * @param progressReviewProjectRequest 主体院审批 工程报告
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "主体院审批 工程报告", nickname = "主体院审批 工程报告")
    @PostMapping(value = "/engineeringReport/review-engineeringReport-organization")
    ResponseData<Boolean> reviewEngineeringReportOrganization(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * EPC项目经理审批 工程报告
     *
     * @param progressReviewProjectRequest EPC项目经理审批 工程报告
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "EPC项目经理审批 工程报告", nickname = "EPC项目经理审批 工程报告")
    @PostMapping(value = "/engineeringReport/review-engineeringReport-EPCManager")
    ResponseData<Boolean> reviewEngineeringReportEPCManager(@Validated @RequestBody ProgressReviewProjectRequest progressReviewProjectRequest);

    /**
     * 施工周月报 导出
     *
     * @param engineeringReportDetailRequest
     * @return com.smedi.ismedi.web.starter.common.ResponseEntity<byte [ ]>
     * @throws IOException
     * @date 2022/10/13 20:47
     */
    @ApiOperation(httpMethod = "POST", value = "施工周月报 导出")
    @PostMapping(value = "/engineeringReport/export")
    ResponseEntity<byte[]> engineeringReportExport(@Validated @RequestBody EngineeringReportDetailRequest engineeringReportDetailRequest) throws IOException;

    /**
     * 工程报告 提交人 撤销 请求
     *
     * @param engineeringReportBackRequest 工程报告 撤销 请求
     * @return ResponseData<EquipmentResponse>
     */
    @ApiOperation(value = "工程报告 提交人 撤销 请求", nickname = "工程报告 提交人 撤销 请求")
    @PostMapping(value = "/engineeringReport/engineeringReportCreateBack")
    ResponseData<Boolean> engineeringReportCreateBack(@Validated @RequestBody EngineeringReportBackRequest engineeringReportBackRequest);
    /**
     * 工程报告 EPC项目经理 撤销 请求
     *
     * @param engineeringReportBackRequest 工程报告 EPC项目经理 撤销 请求
     * @return ResponseData<EquipmentResponse>
     */
    @ApiOperation(value = "工程报告 EPC项目经理 撤销 请求", nickname = "工程报告 EPC项目经理 撤销 请求")
    @PostMapping(value = "/engineeringReport/engineeringReportEPCBack")
    ResponseData<Boolean> engineeringReportEPCBack(@Validated @RequestBody EngineeringReportBackRequest engineeringReportBackRequest);
    /**
     * 工程报告 保存草稿与发布
     *
     * @param engineeringReportListRequest 工程报告 保存草稿与发布
     * @return ResponseData<EquipmentResponse>
     */
    @ApiOperation(value = "工程报告 保存草稿与发布", nickname = "工程报告 保存草稿与发布")
    @PostMapping(value = "/engineeringReport/engineeringMonthWeekSaveDraftAndRelease")
    ResponseData<EngineeringReportOneQueryResponse> engineeringMonthWeekSaveDraftAndRelease(@Validated @RequestBody EngineeringReportListRequest engineeringReportListRequest);


    /**
     * 工程周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）
     * 新增了一个待办通知开关
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "工程周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）", nickname = "进度周报，每个建设中项目，每周日6点还未发布（包含休息日、节假日）")
    @PostMapping(value = "/engineeringReport/weekReportNews")
    ResponseData<Boolean> engineeringWeekReportNews();

    /**
     * 工程月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）
     *新增了一个待办通知开关
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "工程月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）", nickname = "工程月报，每个建设中项目，每月18号6点还未发布（包含休息日、节假日）")
    @PostMapping(value = "/engineeringReport/monthReportNews")
    ResponseData<Boolean> engineeringMonthReportNews();
    /**
     *
     * 施工日志，每个有进度计划、未实际完工的项目，每天超过16点还未新建（包含休息日、节假日）
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "\n" +
            "施工日志，每个有进度计划、未实际完工的项目，每天超过16点还未新建（包含休息日、节假日）", nickname = "施工日志，每个有进度计划、未实际完工的项目，每天超过16点还未新建（包含休息日、节假日）")
    @PostMapping(value = "/constructionLog/constructionLogDealt")
    ResponseData<Boolean> constructionLogDealt();
    /**
     * 进度月报，每个有进度计划、未实际完工的项目，每月18号6点还未创建（包含休息日、节假日)
     *
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度月报，每个有进度计划、未实际完工的项目，每月18号6点还未创建（包含休息日、节假日", nickname = "进度月报，每个有进度计划、未实际完工的项目，每月18号6点还未创建（包含休息日、节假日")
    @PostMapping(value = "/progressProject/monthReportContext")
    ResponseData<Boolean> monthReportContext();

    /**
     * 进度周月报 编辑页面 任务列表
     *
     * @param progressWeekMonthReportRequest 进度周月报 编辑页面
     * @return ResponseData<ProgressResponse>
     */
    @ApiOperation(value = "进度周月报 编辑页面 任务列表", nickname = "进度周月报 编辑页面 任务列表")
    @PostMapping(value = "/progressProject/monthReportEidtDetailTaskList")
    ResponseData<List<ScheduleDetailsResponse>> monthReportEidtDetailTaskList(@Validated @RequestBody ProgressWeekMonthReportRequest progressWeekMonthReportRequest);

    @ApiOperation(value = "进度计划，版本管理 撤销", nickname = "进度计划，版本管理 撤销")
    @PostMapping(value = "/progressProject/cancelVersion")
    ResponseData<String> cancelVersion(@Validated @RequestBody ProgressViewRequest progressViewRequest);

    @ApiOperation(httpMethod = "GET", value = "待办任务处理")
    @GetMapping(value = "/progress/handleTask")
    ResponseData<String> handleTask(@RequestParam("id") Long id);
}
